package com.hilinos.common.util;

import java.util.HashMap;
import java.util.Map;

/**
 * Map的建造者模式类，
 *
 * @param <K>
 * @param <V>
 */
public class MapUtils<K, V> {
    private Map<K, V> map = new HashMap<>();

    private MapUtils() {
    }

    /**
     * 创建builder实例
     *
     * @param key         Map中键的类型
     * @param value       Map中值的类型
     * @param <K>         Map中键的泛型
     * @param <V>Map中值的泛型
     * @return 返回一个对应键值类型的建造者类
     */
    public synchronized static <K, V> MapUtils<K, V> getInstance(Class<K> key, Class<V> value) {
        return new MapUtils<>();
    }

    /**
     * 创建键值对都是String的builder实例
     *
     * @return 返回一个键值都是String的建造者类
     */
    public static MapUtils<String, String> getInstanceStringString() {
        return getInstance(String.class, String.class);
    }

    /**
     * 创建键值对都是String的builder实例
     *
     * @return 返回一个键为String，值为Object的建造者类
     */
    public static MapUtils<String, Object> getInstanceStringObject() {
        return getInstance(String.class, Object.class);
    }

    /**
     * 往Map添加数据
     *
     * @param k Map中的键
     * @param v Map中的值
     * @return 返回当前的建造者类实例
     */
    public MapUtils<K, V> put(K k, V v) {
        map.put(k, v);
        return this;
    }

    /**
     * 生成并返回Map
     *
     * @return 返回Map
     */
    public Map<K, V> build() {
        return map;
    }

}
